This invention relates to memory modules having multiple memory devices. More particularly, this invention relates to memory modules having multiple memory devices with reduced signal loading at the devices' interface.
Computer systems are often designed to provide flexible memory resources (e.g., 512 megabytes, 1.2 gigabytes, etc.), and these memory resources can be designed with different combinations of memory modules, memory devices, or both. For example, the memory capacity of a computer system can be made up of one or more DRAM (dynamic random access memory) based memory modules. If a system's memory comprises two memory modules of equal size, each module represents half the system's memory capacity. One memory module can represent the “lower” half of the computer system's memory, and the other can represent the “upper” half. Alternatively, every other n-bytes of data can be stored in one memory module, while the remaining n-bytes of data can be stored in the other memory module.
Each memory module can include more than one rank of memory devices. Each rank of memory devices can include one or more memory devices that store data for a range of addresses in the computer system's memory and is individually selectable with a chip select signal. In addition, each DRAM-based memory device can be organized into internal banks and rows which have to be activated (or “opened”) before read or write accesses can occur. Typically, only one row (or “page”) in a particular internal bank of a DRAM-based memory device can be open at one time. However, more than one internal bank of such a memory device can be open at one time. Before another row in the same internal bank can be opened, the row currently open has to be closed. Banks and rows of DRAM-based memory devices are activated by commands received from a memory controller over a command address bus.
Inefficiencies in DRAM-based memory devices arise when successive accesses are made to different rows in the same internal bank. Such accesses cause the currently open row to be closed before a different row can be opened, thus delaying the access. One way to minimize these inefficiencies is to close a row as soon as it has been accessed, rather than leaving it open. Then, no unnecessary delay (i.e., row de-activation time) is incurred when a subsequent access is to another row. However, closing rows immediately after access can still result in an unnecessary delay should the next access be to the same row (because now that same row has to be re-opened).
More than one rank of memory devices also can be open at the same time. Thus, having as many ranks of memory as possible constitute the memory resources of a computer system is advantageous because many different internal banks and rows on different memory devices (or memory modules) can be open concurrently. Accordingly, memory modules made up of multiple ranks, each of which can be accessed independently, are commonly used. Examples of memory modules that include multiple ranks are double-sided DIMMs (dual in-line memory modules), which include at least one rank of memory devices on each side of the DIMM.
Typically, the interface between memory modules and the memory controller includes a command bus, an address bus, a data bus, and other control signal lines. Because multi-rank memory modules include memory devices connected in parallel, a potentially large number of memory devices use the same signals, which can result in electrical overloading of the interface between the memory controller and the memory modules. Moreover, each rank of memory devices is individually selected with a corresponding chip select signal. Each chip select signal is also used to establish a window of time during which signals on the command bus and the address bus (hereinafter referred to as the “command address bus”) are valid. As the number of ranks of memory devices in a computer system increases, more time may be needed to ensure that signal degradation of chip select signals and signals on the command address bus does not affect operation of the memory modules.
One approach to alleviating overloaded interface connections between parallel-connected memory devices is to provide duplicate signals from the memory controller to each device. Although this alleviates overloading of connections, duplication is not an economical solution for the large number of connections between a memory controller and each memory module because the memory controller will require more external pins.
Another approach to alleviating overloaded memory interface connections is to buffer the command address bus between the memory controller and the memory modules. However, buffering on the memory module is expensive and requires an extra clock of latency.
Yet another approach to minimizing the effects of an overloaded command address bus (and to maximizing the number of memory modules connectable to a memory controller) is to present the address to the memory two clock cycles in a row, with the chip select signal inactive for the first cycle and active for the second cycle. This provides an extra clock cycle of setup time to the memory devices. The chip select signal still runs in the same manner (i.e., active for only one clock cycle), but the chip select signal is only driven to one module (or rank), so loading is not a problem. This solution is called “2T” addressing. However, 2T addressing diminishes command address bus bandwidth because for every command issued to the memory devices, an extra clock cycle is required. Therefore, for memory devices that can accept signals from a command address bus at maximum speed, 2T addressing reduces memory bandwidth.
In view of the foregoing, it would be desirable to be able to increase the number of memory modules and the number of ranks of memory devices connectable to a memory controller by alleviating the overloading of the command address bus while limiting any decrease in command address bus bandwidth.